package co.yixiang.modules.shop.service.mapper;

import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.modules.product.vo.YxSystemStoreQueryVo;
import co.yixiang.modules.shop.domain.YxSystemStore;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 系统店铺的Mapper接口，继承自CoreMapper，用于执行与系统店铺相关的数据库操作
 */
@Repository
public interface SystemStoreMapper extends CoreMapper<YxSystemStore> {

    /**
     * 根据用户经纬度获取店铺列表，按照距离排序
     *
     * @param page 分页对象，用于分页查询
     * @param lon 用户经度，用于计算距离
     * @param lat 用户纬度，用于计算距离
     * @return 返回一个分页的店铺列表，按照与用户距离由近到远排序
     */
    @Select("SELECT*,ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((#{lat} * PI() / 180 - latitude * PI() / 180" +
            "    ) / 2),2) + COS(40.0497810000 * PI() / 180) * COS(latitude * PI() / 180) * POW(" +
            "    SIN((#{lon} * PI() / 180 - longitude * PI() / 180) / 2),2))) * 1000) AS distance" +
            "    FROM yx_system_store WHERE is_del=0 AND is_show = 1 ORDER BY distance ASC"
    )
    List<YxSystemStoreQueryVo> getStoreList(Page page, @Param("lon") double lon, @Param("lat") double lat);
}
